#!/bin/bash
# 验证敏感文件是否被 .gitignore 正确排除
# Bash 脚本（Linux/Mac）

echo "========================================"
echo "  敏感文件保护验证脚本"
echo "========================================"
echo ""

# 检查 .gitignore 文件是否存在
if [ ! -f ".gitignore" ]; then
    echo "❌ 错误: .gitignore 文件不存在！"
    exit 1
fi
echo "✅ .gitignore 文件存在"

# 检查 data/.gitignore 文件是否存在
if [ ! -f "data/.gitignore" ]; then
    echo "❌ 错误: data/.gitignore 文件不存在！"
    exit 1
fi
echo "✅ data/.gitignore 文件存在"

echo ""
echo "检查敏感文件..."

# 需要被忽略的文件列表
SENSITIVE_FILES=(
    "data/users.json"
    "data/sign_logs.json"
    "config/config.yaml"
)

# 检查 Git 是否初始化
if [ ! -d ".git" ]; then
    echo ""
    echo "⚠️  Git 仓库未初始化"
    echo "   只能检查 .gitignore 配置，无法验证 Git 行为"
    echo ""
    echo "请运行以下命令初始化 Git 仓库："
    echo "   git init"
    echo ""
    exit 0
fi

echo "✅ Git 仓库已初始化"
echo ""

# 使用 git check-ignore 验证
echo "验证文件是否被 Git 忽略..."
echo ""

ALL_IGNORED=true

for file in "${SENSITIVE_FILES[@]}"; do
    if [ -f "$file" ]; then
        if git check-ignore -v "$file" > /dev/null 2>&1; then
            echo "  ✅ $file"
            git check-ignore -v "$file" | sed 's/^/     规则: /'
        else
            echo "  ❌ $file - 未被忽略！"
            ALL_IGNORED=false
        fi
    else
        echo "  ⚪ $file - 文件不存在（正常）"
    fi
done

echo ""

# 检查是否有文件已被 Git 追踪
echo "检查敏感文件是否已被 Git 追踪..."
echo ""

TRACKED=false
for file in "${SENSITIVE_FILES[@]}"; do
    if git ls-files "$file" 2>/dev/null | grep -q .; then
        echo "  ⚠️  $file - 已被 Git 追踪！"
        echo "     请运行: git rm --cached $file"
        TRACKED=true
    fi
done

if [ "$TRACKED" = false ]; then
    echo "  ✅ 没有敏感文件被追踪"
fi

echo ""
echo "========================================"

if [ "$ALL_IGNORED" = true ] && [ "$TRACKED" = false ]; then
    echo "  ✅ 所有检查通过！可以安全上传"
else
    echo "  ⚠️  发现问题，请修复后再上传"
fi

echo "========================================"
echo ""

# 显示将被提交的文件预览（如果有暂存的文件）
if git diff --cached --name-only 2>/dev/null | grep -q .; then
    echo "当前暂存的文件（将被提交）："
    git diff --cached --name-only | sed 's/^/  - /'
    echo ""
fi

echo "💡 提示："
echo "  - 上传前请确保已删除或清空敏感数据文件"
echo "  - 使用 'git status --ignored' 查看所有被忽略的文件"
echo "  - 使用 'git ls-files' 查看将被提交的文件列表"
echo ""

